package cn.iocoder.yudao.module.energy.util;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;

/**
 * 日期处理辅助工具类
 * 用于处理前端传入的日期字符串
 */
public class DateProcessorHelper {

    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern(FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);

    /**
     * 处理日期字符串
     * 1. 如果能正确解析成日期，则返回对应的LocalDateTime
     * 2. 如果解析失败或者是1970年日期，则返回当前时间
     * 
     * @param dateStr 日期字符串
     * @return 处理后的LocalDateTime
     */
    public static LocalDateTime processDateString(String dateStr) {
        // 记录处理信息
        System.out.println("DateProcessorHelper处理日期: " + dateStr);
        
        if (dateStr == null || dateStr.isEmpty()) {
            System.out.println("日期字符串为空，返回当前时间");
            return LocalDateTime.now();
        }
        
        try {
            // 直接解析标准格式
            LocalDateTime dateTime = LocalDateTime.parse(dateStr, FORMATTER);
            
            // 检查是否是1970年日期
            if (dateTime.getYear() == 1970) {
                System.out.println("检测到1970年日期，返回当前时间");
                return LocalDateTime.now();
            }
            
            System.out.println("成功解析日期: " + dateTime.format(FORMATTER));
            return dateTime;
        } catch (DateTimeParseException e) {
            System.out.println("标准格式解析失败，尝试ISO格式: " + e.getMessage());
            
            try {
                // 尝试ISO格式
                LocalDateTime dateTime = LocalDateTime.parse(dateStr);
                System.out.println("成功通过ISO格式解析日期: " + dateTime.format(FORMATTER));
                return dateTime;
            } catch (Exception e2) {
                System.out.println("所有格式解析失败，返回当前时间: " + e2.getMessage());
                return LocalDateTime.now();
            }
        }
    }
    
    /**
     * 处理LocalDateTime对象
     * 如果为null或1970年，则返回当前时间
     * 
     * @param dateTime 需要处理的日期时间
     * @return 处理后的LocalDateTime
     */
    public static LocalDateTime processDateTime(LocalDateTime dateTime) {
        if (dateTime == null) {
            System.out.println("日期对象为null，返回当前时间");
            return LocalDateTime.now();
        }
        
        if (dateTime.getYear() == 1970) {
            System.out.println("检测到1970年日期对象，返回当前时间");
            return LocalDateTime.now();
        }
        
        System.out.println("日期对象有效: " + dateTime.format(FORMATTER));
        return dateTime;
    }
} 